<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // 创建一个 Person 类
        class Person{
            // 构造器方法
            constructor(name,age,sex){
                // 构造器中的 this 是谁？—— 类的实例对象
                this.name = name
                this.age = age
                this.sex = sex
            }
            // 一般方法/自定义方法
            speak(){
                // speak 方法放在了哪里？—— 类的原型对象上，供实例使用
                // 通过 Person 实例调用 speak 时，speak 中的 this 就是 Person 实例
                console.log(`我叫${this.name}，我${this.age}岁了，我是${this.sex}生`)
            }
        }
        
        // // 创建一个 Person 的实例对象
        // const p1 = new Person("小明",12,"男")
        // const p2 = new Person("小花",17,"女")
        // console.log(p1)
        // console.log(p2)
        // p1.speak()
        // p2.speak()

        // 创建一个 Student 类 继承 Person
        class Student extends Person{
            constructor(name,age,sex,grade){
                super(name,age,sex)
                this.grade = grade
            }
            // 重写从父级继承过来的方法
            speak(){
                console.log(`我叫${this.name}，我${this.age}岁了，我是${this.sex}生，我是${this.grade}班的学生`)
            }
        }
        const s1 = new Student("小张",20,"男","高职二班")
        console.log(s1)
        s1.speak()
    </script>
</body>
</html>